/*
 * This file is part of Annuaire.
 *
 * Annuaire is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Annuaire is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Annuaire.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.miage.annuaire.data;

import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import org.miage.annuaire.Membre;

import org.w3c.dom.Document;


/**
 * Cette interface permet d'accéder aux données de l'annuaire au format XML.
 * @author guhumber
 */
public interface XmlDataAccess {

	/**
	 * Renvoie la liste des structures de premier niveau de l'annuaire. Toute
	 * la filiation est crée, de telle sorte que tout l'annuaire est renvoyé.
	 * @return Tout l'annuaire.
	 * @throws ParserConfigurationException S'il y a eu une erreur dans la
	 * construction du document XML.
	 */
	public Document getAllStructures()
			throws ParserConfigurationException;

	/**
	 * Renvoie un document XML qui contient toutes les structures dont les clefs
	 * sont passées en paramètres. Les structures sont contenues linéairement
	 * et ne sont pas imbriquées.
	 * @param keys Les clefs des structures à chercher.
	 * @return Le document XML avec la liste des structures.
	 * @throws ParserConfigurationException S'il y a eu une erreur dans la
	 * construction du document XML.
	 */
	public Document getStructuresByKeys(List<String> keys)
		throws ParserConfigurationException; 
	
	/**
	 * Effectue une recherche sur les trois critères à la fois.
	 * @param paramName Le nom recherché.
	 * @param paramFunction La fonction recherchée.
	 * @param paramStructure La structure recherchée.
	 * @return Une liste de membres.
	 */
	public Document getMembres(String paramName, String paramFunction,
			String paramStructure) throws ParserConfigurationException;
	
	/**
	 * Renvoie une liste de membres en recherchant par leur nom. La recherche ne
	 * tient pas compte de la casse. Si le nom est une chaîne vide ou null,
	 * tous les membres sont renvoyés. Exemple: soit deux membres "TOTO" et
	 * "TATA". Si on recherche "toT", on aura "TOTO". Si on recherche "t" ou ""
	 * ou null, on aura "TOTO" et "TATA".
	 * @param name Le nom (ou la partie du nom) du membre à rechercher.
	 * @return Une liste de membres au format XML.
	 * @throws ParserConfigurationException S'il y a eu une erreur dans la
	 * construction du document XML.
	 */
	public Document getMembresByName(String name) 
			throws ParserConfigurationException;

	/**
	 * Effectue une recherche des membres par nom de fonction. Cette méthode se
	 * comporte de façon analogue à getMembresByName().
	 * @param function La fonction à rechercher.
	 * @return Une liste de membres au format XML.
	 * @throws ParserConfigurationException S'il y a eu une erreur dans la
	 * construction du document XML.
	 */
	public Document getMembresByFunction(String function)
			throws ParserConfigurationException;

         public List<Membre> getMembresByFunctionList(String function)
			throws ParserConfigurationException;

        	/**
	 * Effectue une recherche des membres par nom de fonction. Cette méthode se
	 * comporte de façon analogue à getMembresByName().
	 * @param function La fonction à rechercher.
	 * @return Une liste de membres au format XML.
	 * @throws ParserConfigurationException S'il y a eu une erreur dans la
	 * construction du document XML.
	 */
	public Document getMembresByNameWithFonction(String name,List<Membre> LaList)
			throws ParserConfigurationException;

        public List<Membre> getMembresByNameWithFonctionList(String name,List<Membre> LaList)
			throws ParserConfigurationException;

      	/**
	 * Effectue une recherche des membres par structure. Cette méthode se
	 * comporte de façon analogue à getMembresByName().
	 * @param structure Le nom (ou la partie du nom) du membre à rechercher.
	 * @return Une liste de membres au format XML.
	 * @throws ParserConfigurationException S'il y a eu une erreur dans la
	 * construction du document XML.
	 */
	public Document getMembresByStructure(String structure)
			throws ParserConfigurationException;

        public List<Membre> getMembresByStructureList(String structure)
			throws ParserConfigurationException;

}
